home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / p_man / cat3 / f90 / intro_ffio.z / intro_ffio
Encoding:
Text File  |  1998-10-30  |  43.3 KB  |  889 lines

  1. INTRO_FFIO(3F)                                        Last changed: 3-11-98
  2.  
  3.  
  4. NNAAMMEE
  5.      IINNTTRROO__FFFFIIOO - Describes performance options available with the FFIO
  6.      layers
  7.  
  8. IIMMPPLLEEMMEENNTTAATTIIOONN
  9.      See individual man pages for implementation details.
  10.  
  11. DDEESSCCRRIIPPTTIIOONN
  12.      The Flexible File I/O (FFIO) system lets the user specify a comma-
  13.      separated list of layers through which I/O data is to be passed.  This
  14.      is done by providing a value for the _s_p_e_c argument to the --FF option on
  15.      the aassssiiggnn(1) command.  This specifies a _c_l_a_s_s of processing to be
  16.      done on the data.
  17.  
  18.      The following C routines are used with FFIO:
  19.  
  20.      * ffffffccnnttll(3C):  performs functions on files opened using FFIO
  21.  
  22.      * fffflliissttiioo(3C):  initiates a list of I/O requests using FFIO
  23.  
  24.      * ffffiioolloocckk(3C):  locks and unlocks function calls
  25.  
  26.      * ffffooppeenn(3C):  opens or closes a file using FFIO
  27.  
  28.      * ffffppooss(3C):  positions files opened using FFIO
  29.  
  30.      * ffffrreeaadd(3C):  reads from a file using FFIO
  31.  
  32.      * ffffrreeaaddaa(3C):  provides asynchronous read using FFIO
  33.  
  34.      * ffffsseeeekk(3C):  repositions a FFIO file
  35.  
  36.      * ffffwwrriitteeaa(3C):  provides asynchronous write using FFIO
  37.  
  38.      * ffffsseettsspp(3C):  initiates EOV processing for files opened using FFIO
  39.  
  40.      * ffffwwrriittee(3C): writes to a file using FFIO
  41.  
  42.    FFFFIIOO oonn IIRRIIXX ssyysstteemmss
  43.      On IRIX systems, the FFIO library calls aaiioo__ssggii__iinniitt the first time it
  44.      issues an asynchronous I/O call.  It passes the following parameters
  45.      to aaiioo__ssggii__iinniitt:
  46.  
  47.           aio_numusers=MAX(64,sysconf(_SC_NPROC_CONF))
  48.           aio_threads=5
  49.           aio_locks=3
  50.  
  51.      If a program is using multiple threads and asychronous I/O, it is
  52.      important that the value of aaiioo__nnuummuusseerrss be at least as large as the
  53.      number of sprocs and pthreads that the application contains.  For more
  54.      information, see the aaiioo__ssggii__iinniitt man page on IRIX systems.
  55.  
  56.      Users can change these values by setting the following environment
  57.      variables to the desired value:
  58.  
  59.      * change FFFF__IIOO__AAIIOO__TTHHRREEAADDSS to modify aaiioo__tthhrreeaaddss
  60.  
  61.      * change FFFF__IIOO__AAIIOO__LLOOCCKKSS to modify aaiioo__lloocckkss
  62.  
  63.      * change FFFF__IIOO__AAIIOO__NNUUMMUUSSEERRSS to modify aaiioo__nnuummuusseerrss
  64.  
  65.      The following example causes aaiioo__tthhrreeaaddss to be set to 8 when the FFIO
  66.      routines call aaiioo__ssggii__iinniitt:
  67.  
  68.           setenv FF_IO_AIO_THREADS 8
  69.  
  70.      Users can also supersede the FFIO library's call to aaiioo__ssggii__iinniitt by
  71.      calling it themselves, before the first I/O statement in their
  72.      program.
  73.  
  74.      The following layers can issue asynchronous I/O calls on IRIX systems:
  75.  
  76.      * ccooss: see the later description on this man page for a description of
  77.        how the ccooss layer uses asynchronous I/O.
  78.  
  79.      * ccaacchheeaa and bbuuffaa: users should assume that these layers may issue
  80.        asynchronous I/O calls.
  81.  
  82.      * ssyysstteemm or ssyyssccaallll: these layers may issue asynchronous I/O calls if
  83.        called from a BBUUFFFFEERR IINN or BBUUFFFFEERR OOUUTT statement, or from the ccooss or
  84.        ccaacchheeaa layer.  The ssyysstteemm and ssyyssccaallll layer may also issue
  85.        asynchronous I/O calls if called via ffffrreeaaddaa(3C), ffffwwrriitteeaa(3C), or
  86.        fffflliissttiioo(3C) (all deferred on IRIX systems).
  87.  
  88.    SSppeecciiffyyiinngg FFFFIIOO LLaayyeerrss
  89.      The _s_p_e_c argument of the --FF option of the aassssiiggnn(1) command comprises
  90.      a list of layers or filters that are used to manipulate the data file
  91.      as it is being read or written.  The available layers include
  92.      performance options (such as memory-resident and SDS-resident files)
  93.      and the capability to read and write files in a variety of different
  94.      vendors' blocking formats.  Each layer _s_p_e_c is of the general form:
  95.  
  96.           _c_l_a_s_s[._t_y_p_e[._s_u_b_t_y_p_e]][:_n_u_m_1]:[_n_u_m_2]:[_n_u_m_3]]
  97.  
  98.      Many of the layers also allow you to specify the numeric parameters
  99.      with a keyword.  On UNICOS and UNICOS/mk systems, this requires that
  100.      your application be linked with Cray Research's CrayLibs 3.0 or later
  101.      releases.  The format for these specifications is given in the
  102.      description of each layer where the specification is available.
  103.  
  104.      Selected layers are available on IRIX systems.  The available
  105.      platforms are detailed in each layer's description.
  106.  
  107.      For more information about FFIO, see the _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O
  108.      _G_u_i_d_e, publication SG-2168.
  109.  
  110.      The _s_p_e_c argument can have the following values:
  111.  
  112.      CCllaassss         EExxppllaannaattiioonn
  113.  
  114.      bbllaannkkxx  or  bbllxx
  115.                    Blank compression filter.  This layer is used as a
  116.                    filter to compress or decompress blanks in character
  117.                    data.
  118.  
  119.                    Not available on IRIX systems.
  120.  
  121.                    _t_y_p_e can be one of the following:
  122.  
  123.                    ccooss  COS-style blank compression (bbllxxcchhrr=27 or Ox10)
  124.  
  125.                    ccttssss CTSS-style blank compression (bbllxxcchhrr=48 or 0x30)
  126.  
  127.                    cc220055 CYBER 205-style blank compression (bbllxxcchhrr=48 or
  128.                         0x30)
  129.  
  130.                    _n_u_m_1 is the decimal value of the ASCII character used as
  131.                    the escape code to control the blank compression
  132.                    (usually EESSCC or 27).  _n_u_m_2 is the decimal value of the
  133.                    ASCII character that is the object of the compression
  134.                    (usually BBLLAANNKK or 32).
  135.  
  136.                    You can specify the numeric parameters with this
  137.                    alternate keyword syntax:
  138.  
  139.                    bbllxx[[.._t_y_p_e]][[..bbllxxcchhrr==_n_u_m_1]][[..bbllnnkk==_n_u_m_2]]
  140.  
  141.                    bbllaannkkxx[[.._t_y_p_e]][[..bbllxxcchhrr==_n_u_m_1]][[..bbllnnkk==_n_u_m_2]]
  142.  
  143.      bbmmxx           Tape I/O.  Each logical record requested is a physical
  144.                    tape block.
  145.  
  146.                    Deferred implementation on IRIX systems.
  147.  
  148.                    The _n_u_m_1 field represents the size of each buffer, in
  149.                    4096-byte blocks.  The _n_u_m_2 field represents the number
  150.                    of buffers.
  151.  
  152.                    On UNICOS systems, files on ER90 volumes that have been
  153.                    mounted in blocked mode may use this layer (see the _T_a_p_e
  154.                    _S_u_b_s_y_s_t_e_m _U_s_e_r'_s _G_u_i_d_e, publication SG-2051, for
  155.                    information about restrictions on record sizes when
  156.                    using ER90 block mode).
  157.  
  158.                    You can specify the numeric parameters with this
  159.                    alternate keyword syntax:
  160.  
  161.                    bbmmxx[[..bbuuffssiizzee==_n_u_m_1]][[..nnuumm__bbuuffffeerrss==_n_u_m_2]]
  162.  
  163.      bbuuffaa          Asynchronous buffering layer.
  164.  
  165.                    Available on IRIX systems.
  166.  
  167.                    The bbuuffaa layer provides asynchronous buffering.  It
  168.                    allows efficient sequential-access I/O.
  169.  
  170.                    The _n_u_m_1 field represents the size in 4096-byte blocks
  171.                    of each buffer.  The maximum value for _n_u_m_1 on IRIX
  172.                    systems is 32,767.  The maximum allowed value on UNICOS
  173.                    and UNICOS/mk systems is 1,073,741,823 (you may not be
  174.                    able to use a value of this size because that amount of
  175.                    memory may not be available).
  176.  
  177.                    The _n_u_m_2 field selects the number of buffers to be used.
  178.  
  179.                    You can specify the numeric parameters with this
  180.                    alternate keyword syntax:
  181.  
  182.                    bbuuffaa[[..bbuuffssiizzee==_n_u_m_1]][[..nnuumm__bbuuffffeerrss==_n_u_m_2]]
  183.  
  184.      cc220055          CDC CYBER 205/ETA records.
  185.  
  186.                    Not available on IRIX systems.
  187.  
  188.                    The CYBER 205-type W record can be selected by
  189.                    specifying cc220055..ww.  The _n_u_m_1 field is not permitted.
  190.                    The _n_u_m_2 field represents the size of the working
  191.                    buffer, in bytes, used in record blocking.  If any
  192.                    logical records written exceed this size, a major
  193.                    performance penalty can result.
  194.  
  195.                    The _t_y_p_e field should be specified as ww.  The best
  196.                    performance is currently obtained when _n_u_m_2 is greater
  197.                    than the largest record to be processed plus 16 bytes.
  198.  
  199.                    You can specify the numeric parameters with this
  200.                    alternate keyword syntax:
  201.  
  202.                    cc220055[[..ww]][[..bbuuffssiizzee==_n_u_m_2]]
  203.  
  204.      ccaacchhee         Cached file.  The ccaacchhee layer allows efficient
  205.                    random-access I/O, even when file access is clustered in
  206.                    several regions of a file.
  207.  
  208.                    Available on IRIX systems.
  209.  
  210.                    During reads and writes to the layer, cache buffers
  211.                    frequently must be preempted.  The buffer chosen for
  212.                    preemption is always the least recently accessed buffer
  213.                    at the time of preemption.
  214.  
  215.                    The options available are ..mmeemm, which specifies that
  216.                    buffers reside in memory or ..ssddss, which specifies that
  217.                    buffers reside in the SDS.  (..ssddss is not supported on
  218.                    CRAY T3E systems or IRIX systems).  Memory-resident
  219.                    buffers are the default.
  220.  
  221.                    The numeric fields are as follows:
  222.  
  223.                    * _n_u_m_1 is the size in 4096-byte blocks of each cache
  224.                      page.  The maximum value for _n_u_m_1 on IRIX systems is
  225.                      32,767.  The maximum allowed value on UNICOS and
  226.                      UNICOS/mk systems is 1,073,741,823 (you may not be
  227.                      able to use a value of this size because that amount
  228.                      of memory may not be available).
  229.  
  230.                    * _n_u_m_2 selects the number of cache pages to be used.
  231.  
  232.                    * _n_u_m_3 is the size in 4096-byte blocks at which the
  233.                      ccaacchhee layer attempts to bypass ccaacchhee layer buffering.
  234.                      If a user's I/O request is larger than _n_u_m_3, the
  235.                      request might not be copied to a cache page.  The
  236.                      default on IRIX systems is _n_u_m_3=_n_u_m_1.  The default on
  237.                      UNICOS and UNICOS/mk systems is _n_u_m_3=_n_u_m_1*_n_u_m_2.
  238.  
  239.                    You can specify the numeric parameters with this
  240.                    alternate keyword syntax:
  241.  
  242.                    ccaacchhee[[.._t_y_p_e]][[..ppaaggee__ssiizzee==_n_u_m_1]][[..nnuumm__ppaaggeess==_n_u_m_2]]
  243.                    [[..bbyyppaassss__ssiizzee==_n_u_m_3]]
  244.  
  245.      ccaacchheeaa        Asynchronously cached file.
  246.  
  247.                    Available on IRIX systems.
  248.  
  249.                    This type of processing usually performs well whenever
  250.                    the ccaacchhee layer might be used.  In addition, any
  251.                    sequential forward and sequential backward access
  252.                    through the file is detected.  When sequential access
  253.                    patterns are detected while reading, asynchronous
  254.                    read-ahead is performed provided that the numbers of
  255.                    pages to read ahead has been specified.  When writing,
  256.                    selective asynchronous write-behind is performed.
  257.  
  258.                    The values for _t_y_p_e are ..mmeemm, which specifies that
  259.                    buffers reside in memory, or ..ssddss, which specifies that
  260.                    buffers reside in the SDS (..ssddss is not supported on
  261.                    CRAY T3E systems or on IRIX systems).  Memory-resident
  262.                    buffers are the default.
  263.  
  264.                    The numeric fields are as follows:
  265.  
  266.                    * _n_u_m_1 is the size in 4096-byte blocks of each cache
  267.                      page.  The maximum value for _n_u_m_1 on IRIX systems is
  268.                      32,767.  The maximum allowed value on UNICOS and
  269.                      UNICOS/mk systems is 1,073,741,823 (you may not be
  270.                      able to use a value of this size because that amount
  271.                      of memory may not be available).
  272.  
  273.                    * _n_u_m_2 selects the number of cache pages to be used.
  274.  
  275.                    * _n_u_m_3 selects the number of pages to read ahead
  276.                      asynchronously.  The default is 0.
  277.  
  278.                    * _n_u_m_4 selects a shared cache number in the range of 1
  279.                      to 15.  If _n_u_m_4 is 0, a private cache is indicated.
  280.  
  281.                    You can specify the numeric parameters with this
  282.                    alternate keyword syntax:
  283.  
  284.                    ccaacchheeaa[[.._t_y_p_e]][[..ppaaggee__ssiizzee==_n_u_m_1]][[..nnuumm__ppaaggeess==_n_u_m_2]]
  285.                    [[..mmaaxx__lleeaadd==_n_u_m_3]][[..sshhaarreedd__ccaacchhee==_n_u_m_4]]
  286.  
  287.                    On IRIX systems, stacked shared ccaacchheeaa layers are not
  288.                    supported.
  289.  
  290.                    On UNICOS and UNICOS/mk systems, stacked shared ccaacchheeaa
  291.                    layers are supported, but in multitasked programs,
  292.                    different files must not mix the order of the shared
  293.                    caches.
  294.  
  295.                    Examples:
  296.  
  297.                    The following specifications ccaannnnoott both be used by a
  298.                    multitasked program:
  299.  
  300.                    * aassssiiggnn --FF ccaacchheeaa::::::::11,,ccaacchheeaa::::::::22 uu::11
  301.  
  302.                    * aassssiiggnn --FF ccaacchheeaa::::::::22,,ccaacchheeaa::::::::11 uu::22
  303.  
  304.                    The following specifications ccaann both be used by a
  305.                    multitasked program on a UNICOS system:
  306.  
  307.                    * aassssiiggnn --FF ccaacchheeaa::::::::11,,ccaacchheeaa::::::::22 uu::11
  308.  
  309.                    * aassssiiggnn --FF ccaacchheeaa::::::::11,,ccaacchheeaa::::::::22 uu::22
  310.  
  311.      ccddcc           CDC 60-bit format _t_y_p_e.
  312.  
  313.                    Not available on IRIX systems.
  314.  
  315.                    No numeric fields are accepted.
  316.  
  317.                    The supported values for _t_y_p_e are as follows:
  318.  
  319.                    _t_y_p_e    FFoorrmmaatt
  320.  
  321.                    iiww      I-type blocks, W-type records
  322.  
  323.                    ccww      C-type blocks, W-type records
  324.  
  325.                    ccss      C-type blocks, S-type records
  326.  
  327.                    cczz      C-type blocks, Z-type records
  328.  
  329.                    The _s_u_b_t_y_p_e field accepts one of the following values
  330.                    that indicate the presence of block trailers and other
  331.                    low-level characteristics:
  332.  
  333.                    _s_u_b_t_y_p_e    VVaalluuee
  334.  
  335.                    ddiisskk       Disk type structure, for use with station
  336.                               transfers of CYBER datasets
  337.  
  338.                    ii          NOS internal tape format
  339.  
  340.                    ssii         System internal or SCOPE internal tape format
  341.  
  342.      ccooss or bblloocckkeedd
  343.                    COS blocking.
  344.  
  345.                    Available on IRIX systems.
  346.  
  347.                    If specified, _t_y_p_e must be one of the following:
  348.  
  349.                    _t_y_p_e       AAccttiioonn
  350.  
  351.                    ssyynncc       Uses a single buffer in the blocking and
  352.                               deblocking process.  I/O is done strictly
  353.                               synchronously.
  354.  
  355.                    aassyynncc      Divides the buffer into two parts and uses
  356.                               asynchronous I/O to transfer the blocked data
  357.                               between the buffer(s) and the logical device.
  358.                               When reading, asynchronous read-ahead is
  359.                               performed, and when writing, asynchronous
  360.                               write-behind is performed.  To effectively
  361.                               use aassyynncc, the buffer size should be at least
  362.                               twice the record length.
  363.  
  364.                    aauuttoo       Default (if _t_y_p_e is not specified).  Chooses
  365.                               either synchronous or asynchronous behavior
  366.                               depending on the buffer size.  If the buffer
  367.                               size is less than 64 blocks, synchronous
  368.                               behavior is selected.  If it is greater than
  369.                               or equal to 64 blocks, asynchronous behavior
  370.                               is selected.
  371.  
  372.                    For _n_u_m_1, enter the desired buffer size in 4096-byte
  373.                    blocks (for example, --FF ccooss::4422 requests COS blocking and
  374.                    a 42-block buffer).  The _n_u_m_1 value also determines the
  375.                    record size for underlying layers which perform record
  376.                    blocking.  The underlying record size is _n_u_m_1 blocks if
  377.                    in synchronous mode and _n_u_m_1/2 or _n_u_m_1/2+1 blocks if in
  378.                    asynchronous mode.  For an underlying tape layer, the
  379.                    record size is the tape block size.
  380.  
  381.                    You can specify the numeric parameters with this
  382.                    alternate keyword syntax:
  383.  
  384.                    ccooss[[.._t_y_p_e]][[..bbuuffssiizzee==_n_u_m_1]]
  385.  
  386.      eerr9900          ER90 I/O.
  387.  
  388.                    Not available on IRIX systems or on CRAY T3E systems.
  389.  
  390.                    Each I/O operation results in a corresponding system
  391.                    call.  Adjacent records are not delimited from one
  392.                    another.  No subfields are accepted.  The byte-stream
  393.                    mode of the device must be used.  See ttppmmnntt(1).
  394.  
  395.      eevveenntt         I/O layer monitoring.
  396.  
  397.                    Available on Cray PVP systems and CRAY T3E systems.
  398.                    Deferred implementation on IRIX systems.
  399.  
  400.                    The eevveenntt layer monitors I/O occurring between two
  401.                    layers on a per-file basis.  This layer generates
  402.                    statistics in an ASCII log file; users can specify what
  403.                    type of report is generated.  The eevveenntt layer is enabled
  404.                    by default.  Users do not have to relink their programs
  405.                    to study I/O performance.  To generate information,
  406.                    rerun the program with the eevveenntt layer specified on the
  407.                    aassssiiggnn command.
  408.  
  409.                    Statistics are reported to ssttddeerrrr by default.  The
  410.                    FFFF__IIOO__LLOOGGFFIILLEE environment variable can be used to name a
  411.                    file to which statistics are written by the eevveenntt layer.
  412.                    The default action is to overwrite the existing file.
  413.                    To append information to an existing file, specify a
  414.                    plus sign (++) before the file name.
  415.  
  416.                    On CRAY T3E systems, if more than one process is using
  417.                    the eevveenntt layer, and you set the FFFF__IIOO__LLOOGGFFIILLEE
  418.                    environment variable, you must use the plus sign (++)
  419.                    before the file name to prevent  _p_r_o_c_e_s_s _a from
  420.                    overwriting the information written by _p_r_o_c_e_s_s _b.  Using
  421.                    the plus sign also means that the information will be
  422.                    appended to an existing file.
  423.  
  424.                    On CRAY T3E systems you can also use the FFFF__IIOO__LLOOGGFFIILLEEPPEE
  425.                    environment variable to name a file to which statistics
  426.                    are written.  The file name will be _x._n, where _x is the
  427.                    name specified by the environment variable and _n is the
  428.                    number of the PE which wrote the file.  The default
  429.                    action is to overwrite the existing file.  To append
  430.                    information to the existing file, specify a plus sign
  431.                    (++) before the file name.
  432.  
  433.                    Enter one of the following for _t_y_p_e:
  434.  
  435.                    vvaalluuee          IInnffoorrmmaattiioonn rreeppoorrtteedd
  436.  
  437.                    nnoossttaatt         No statistical information is reported.
  438.  
  439.                    ssuummmmaarryy        Information on event types that occur at
  440.                                   least once are reported.
  441.  
  442.                    bbrriieeff          A one-line summary for layer activities
  443.                                   is reported.
  444.  
  445.      ff7777           FORTRAN 77/UNIX Fortran record blocking.  This is the
  446.                    common blocking format used by most FORTRAN 77 compilers
  447.                    on UNIX systems.
  448.  
  449.                    Available on IRIX systems.
  450.  
  451.                    Enter one of the following for _t_y_p_e:
  452.  
  453.                    _t_y_p_e      FFoorrmmaatt
  454.  
  455.                    nnoonnvvaaxx    Default.  Control words in a format common to
  456.                              machines such as the MC68000.
  457.  
  458.                    vvaaxx       VAX format (byte-swapped) control words.  Not
  459.                              available on IRIX systems.
  460.  
  461.                              The specification of vvaaxx or nnoonnvvaaxx is not
  462.                              relevant to data conversion.
  463.  
  464.                    For _n_u_m_1, enter the maximum record size in bytes.  For
  465.                    _n_u_m_2, enter the working buffer size, in bytes.
  466.  
  467.                    You can specify the numeric parameters with this
  468.                    alternate keyword syntax:
  469.  
  470.                    ff7777[[.._t_y_p_e]][[..rreeccssiizzee==_n_u_m_1]][[..bbuuffssiizzee==_n_u_m_2]]
  471.  
  472.      ffdd            Connect to a specific file descriptor.
  473.  
  474.                    Available on IRIX systems.
  475.  
  476.                    Field _n_u_m_1 is the decimal value of the file descriptor.
  477.                    Classes named ssttddiinn, ssttddoouutt, and ssttddeerrrr exist as
  478.                    alternate names for ffdd::00, ffdd::11, and ffdd::22.
  479.  
  480.                    You can specify the numeric parameters with this
  481.                    alternate keyword syntax:
  482.  
  483.                    ffdd[[..ffiillee__ddeessccrriippttoorr==_n_u_m_1]]
  484.  
  485.      gglloobbaall        File global to all PEs.
  486.  
  487.                    Available on IRIX systems.
  488.  
  489.                    This is a caching layer which distributes the cache
  490.                    across multiple SHMEM or MPI processes.  Open and close
  491.                    operations are collective (require participation by all
  492.                    processes which access the file).  All other operations
  493.                    are independently performed by one or more processes.
  494.                    The library allows multiple processes to concurrently
  495.                    access the file while maintaining coherency of buffered
  496.                    data.
  497.  
  498.                    Specify one of the following options for _t_y_p_e:
  499.  
  500.                    _t_y_p_e           DDeessccrriippttiioonn
  501.  
  502.                    pprriivvppooss        Default.  The file position is private to
  503.                                   a process.  All processes may seek to
  504.                                   independent locations in the file.
  505.  
  506.                    gglloobbppooss        (Deferred).  The file position is global
  507.                                   to all processes.  A seek or I/O
  508.                                   operation by any process will affect the
  509.                                   position for all processes.
  510.  
  511.                    The numeric fields are as follows:
  512.  
  513.                    _n_u_m_1 The size in 4096-byte blocks of each cache page.
  514.  
  515.                    _n_u_m_2 Selects the number of cache pages to be used on
  516.                         each process.  If there are _n processes, then _n *
  517.                         _n_u_m_2 cache pages are used.
  518.  
  519.                    You can specify the numeric parameters with this
  520.                    alternate keyword syntax:
  521.  
  522.                    gglloobbaall[[.._t_y_p_e]][[..ppaaggee__ssiizzee==_n_u_m_1]][[..nnuumm__ppaaggeess==_n_u_m_2]]
  523.  
  524.      iibbmm           Record blocking for common record types on IBM operating
  525.                    systems.
  526.  
  527.                    Deferred implementation on IRIX systems.
  528.  
  529.                    Specify one of the following record formats for _t_y_p_e:
  530.  
  531.                    _t_y_p_e   FFoorrmmaatt
  532.  
  533.                    ff      Fixed-length record format.  For _n_u_m_1, enter the
  534.                           logical record size in 8-bit bytes.  For _n_u_m_2,
  535.                           enter the maximum physical block size in 8-bit
  536.                           bytes; if specified, _n_u_m_2 must be equal to _n_u_m_1.
  537.  
  538.                    ffbb     Fixed-length, blocked record format.  For _n_u_m_1,
  539.                           enter the logical record size in 8-bit bytes.
  540.                           For _n_u_m_2, enter the maximum physical block size
  541.                           in 8-bit bytes; _n_u_m_2 must be an exact multiple of
  542.                           _n_u_m_1.
  543.  
  544.                    uu      Undefined record format.  For _n_u_m_1, enter the
  545.                           maximum record size, in 8-bit bytes.
  546.  
  547.                    vv      Variable length record format.  For _n_u_m_1, enter
  548.                           the maximum logical record size in 8-bit bytes.
  549.                           For _n_u_m_2, enter the maximum physical block size
  550.                           in 8-bit bytes.
  551.  
  552.                    vvbb     Variable length blocked record format.  For _n_u_m_1,
  553.                           enter the maximum logical record size in 8-bit
  554.                           bytes.  For _n_u_m_2, enter the maximum physical
  555.                           block size in 8-bit bytes.
  556.  
  557.                    vvbbss    Variable length blocked, spanned record format.
  558.                           For _n_u_m_1, enter the maximum logical record size
  559.                           in 8-bit bytes.  For _n_u_m_2, enter the maximum
  560.                           physical block size in 8-bit bytes.
  561.  
  562.                    No _s_u_b_t_y_p_e is accepted for the iibbmm class record formats.
  563.                    _n_u_m_1 does not need to be smaller than _n_u_m_2.
  564.  
  565.                    You can specify the numeric parameters with this
  566.                    alternate keyword syntax:
  567.  
  568.                    iibbmm[[.._t_y_p_e]][[..rreeccssiizzee==_n_u_m_1]][[..mmbbss==_n_u_m_2]]
  569.  
  570.      mmrr or ssddss     Memory-resident and SDS-resident files.  mmrr is a
  571.                    deferred implementation on IRIX systems.  ssddss is not
  572.                    available on CRAY T3E systems or on IRIX systems.
  573.  
  574.                    The mmrr and ssddss layers let you declare a byte-stream
  575.                    file, but the given file should reside in the specified
  576.                    medium as much as possible; this can improve
  577.                    performance.
  578.  
  579.                    Enter one of the following for _t_y_p_e:
  580.  
  581.                    _t_y_p_e       LLooaadd SSppeecciiffiiccaattiioonn
  582.  
  583.                    ssaavvee       Default.  Loads the file into the specified
  584.                               medium when the file is opened and writes the
  585.                               data back out when closed.
  586.  
  587.                    ssccrr        Scratch file.  Does not attempt to load at
  588.                               open and discards data on close.
  589.  
  590.                    Enter one of the following for _s_u_b_t_y_p_e:
  591.  
  592.                    _s_u_b_t_y_p_e    OOvveerrffllooww SSppeecciiffiiccaattiioonn
  593.  
  594.                    oovvffll       Default.  Writes excess data that does not
  595.                               fit in the specified medium to the next lower
  596.                               layer.
  597.  
  598.                    nnoovvffll      If data does not fit in the specified medium,
  599.                               subsequent wwrriittee(1) operations fail.
  600.  
  601.                    The mmrr and ssddss layers accept numeric fields.  Generally,
  602.                    the numeric field specification represents best-efforts
  603.                    values.  They are used for tuning purposes and usually
  604.                    do not cause errors if they are not satisfied precisely
  605.                    as specified.  The fields are as follows:
  606.  
  607.                    FFiieelldd    VVaalluuee
  608.  
  609.                    _n_u_m_1     Initial size of the memory or SDS allocation.
  610.                             Specified in 4096-byte blocks.  Default is 0.
  611.  
  612.                    _n_u_m_2     Maximum size of the memory or SDS allocation.
  613.                             Specified in 4096-byte blocks.  Default is
  614.                              46
  615.                             s  -1.
  616.  
  617.                    _n_u_m_3     Increment size of the memory or SDS allocation.
  618.                             Specified in 4096-byte blocks.  This value is
  619.                             used when allocating additional memory or SDS
  620.                             space.  The default is 256 for SDS files and 32
  621.                             for memory resident files.
  622.  
  623.                    For example, if the SDS limit for a process is 1000
  624.                    blocks, and ssddss..ssccrr::11550000 is specified, an initial SDS
  625.                    allocation of 1000 blocks is used.
  626.  
  627.                    Similarly, if ssddss::550000::1100000000::11000000 was specified, the
  628.                    first request for SDS space would result in the
  629.                    allocation of 500 blocks.  If possible, this is
  630.                    allocated contiguously, but it is not guaranteed.  If a
  631.                    file size exceeds 500 blocks, an attempt is made to
  632.                    increase the file by an increment of 1000 blocks.  If
  633.                    this attempt fails, whatever can be allocated is given
  634.                    to the file.  Assuming no other SDS use, this is 500
  635.                    blocks.  At this point, the file assumes an overflow
  636.                    status.
  637.  
  638.                    When using memory-resident files, you must ensure that
  639.                    not too much data is written to the file without
  640.                    limiting its size.  Unrestrained and unmanaged growth of
  641.                    such a file can cause heap fragmentation and program
  642.                    abort.  If this growth has used all available memory,
  643.                    the error message processor may be unable to issue a
  644.                    message.  Therefore, such an abort may be difficult to
  645.                    diagnose and correct.  It is recommended that the
  646.                    maximum memory size field be specified in all cases.
  647.                    (For example, mmrr..ssccrr::::1100000000 would limit such a file to
  648.                    approximately 5 Mwords of main memory.)
  649.  
  650.                    You can specify the numeric parameters with this
  651.                    alternate keyword syntax:
  652.  
  653.                    mmrr[[.._t_y_p_e[[.._s_u_b_t_y_p_e]]]][[..ssttaarrtt__ssiizzee==_n_u_m_1]] [[..mmaaxx__ssiizzee==_n_u_m_2]]
  654.                    [[..iinncc__ssiizzee==_n_u_m_3]]
  655.  
  656.                    ssddss[[.._t_y_p_e[[.._s_u_b_t_y_p_e]]]][[..ssttaarrtt__ssiizzee==_n_u_m_1]] [[..mmaaxx__ssiizzee==_n_u_m_2]]
  657.                    [[..iinncc__ssiizzee==_n_u_m_3]]
  658.  
  659.      nnuullll          Syntactic no-op.
  660.  
  661.                    Available on IRIX systems.
  662.  
  663.                    No optional fields are accepted.  nnuullll may be specified
  664.                    where syntax demands a value, but no function is
  665.                    desired.  This does not perform the same function as
  666.                    //ddeevv//nnuullll.
  667.  
  668.      nnoossvvee         CDC NOS/VE record formats.
  669.  
  670.                    Not available on IRIX systems.
  671.  
  672.                    The following values are allowed for the _t_y_p_e and _n_u_m
  673.                    fields:
  674.  
  675.                    _t_y_p_e    VVaalluuee
  676.  
  677.                    dd       ANSI D format (variable-length) records.  For
  678.                            _n_u_m_1, enter the maximum logical record size in
  679.                            8-bit bytes.  For _n_u_m_2, enter the maximum
  680.                            physical block size in 8-bit bytes.
  681.  
  682.                    ff       ANSI F fixed-length records.  For _n_u_m_1, enter
  683.                            the logical record size in 8-bit bytes.  For
  684.                            _n_u_m_2, enter the maximum physical block size in
  685.                            8-bit bytes; _n_u_m_2 must be an exact multiple of
  686.                            _n_u_m_1.
  687.  
  688.                    ss       ANSI S format (segmented) records.  For _n_u_m_1,
  689.                            enter the maximum logical record size.  For
  690.                            _n_u_m_2, enter the maximum physical block size used
  691.                            in the lower-level layers.
  692.  
  693.                    uu       Undefined records.  For _n_u_m_1, enter the maximum
  694.                            logical record size, in 8-bit bytes.  For _n_u_m_2,
  695.                            enter the maximum physical block size in 8-bit
  696.                            bytes.
  697.  
  698.                    vv       NOS/VE V format records.  The _n_u_m_1 field is not
  699.                            permitted.  For _n_u_m_2, specify the size of the
  700.                            working buffer used in record blocking; if any
  701.                            logical records that are written exceed this
  702.                            size, a major performance penalty can result.
  703.  
  704.                    You can specify the numeric parameters with this
  705.                    alternate keyword syntax (as noted previously, ..rreeccssiizzee
  706.                    may not be permitted for some _t_y_p_e_s):
  707.  
  708.                    nnoossvvee[[.._t_y_p_e]][[..rreeccssiizzee==_n_u_m_1]][[..mmbbss==_n_u_m_2]]
  709.  
  710.      ssiittee          Site layer.  This option lets a site add custom I/O
  711.                    handlers for specific needs at load time.  See the
  712.                    _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O _G_u_i_d_e, publication SG-2168,
  713.                    for details.
  714.  
  715.                    Available on IRIX systems.
  716.  
  717.      ssttddiinn, ssttddoouutt, or ssttddeerrrr
  718.                    Connects to specific file descriptors 0, 1, and 2,
  719.                    respectively.  (See the ffdd class.)
  720.  
  721.      ssyysstteemm        Generic system I/O layer.  Selects bbmmxx, eerr9900, or ssyyssccaallll
  722.                    as appropriate.
  723.  
  724.                    Available on IRIX systems.
  725.  
  726.      ssyyssccaallll       System I/O call.  Each I/O operation results in a
  727.                    corresponding system call.
  728.  
  729.                    Available on IRIX systems.
  730.  
  731.      ttaappee          Tape I/O.  Each logical record requested is a physical
  732.                    tape block.  This is the same as bbmmxx.
  733.  
  734.                    Deferred implementation on IRIX systems.
  735.  
  736.                    The _n_u_m_1 field represents the size of each buffer, in
  737.                    4096-byte blocks. The _n_u_m_2 field represents the number
  738.                    of buffers.
  739.  
  740.                    You can specify the numeric parameters with this
  741.                    alternate keyword syntax:
  742.  
  743.                    ttaappee[[..bbuuffssiizzee==_n_u_m_1]][[..nnuumm__bbuuffffeerrss==_n_u_m_2]]
  744.  
  745.      tteexxtt          Special character terminated records.
  746.  
  747.                    Available on IRIX systems.
  748.  
  749.                    Enter one of the following for _t_y_p_e:
  750.  
  751.                    _t_y_p_e    FFoorrmmaatt
  752.  
  753.                    nnll      Newline-separated records
  754.  
  755.                    eeooff     Newline-separated records and the special
  756.                            character sequence ~~ee on a line by itself
  757.                            delimiting EOF
  758.  
  759.                    220055     CYBER 205-style text file
  760.  
  761.                    ccttssss    CTSS-style text format
  762.  
  763.                    This class accepts _n_u_m specifications.  If specified,
  764.                    _n_u_m_1 represents the decimal value of the ASCII character
  765.                    to use to delimit records; the default varies depending
  766.                    on the _t_y_p_e.  For _n_u_m_2, enter the requested working
  767.                    buffer size in bytes.
  768.  
  769.                    You can specify the numeric parameters with this
  770.                    alternate keyword syntax:
  771.  
  772.                    tteexxtt[[.._t_y_p_e]][[..nneewwlliinnee==_n_u_m_1]][[..bbuuffssiizzee==_n_u_m_2]]
  773.  
  774.      uusseerr          User layer.  This option allows a user to add custom I/O
  775.                    handlers for specific needs at load time.  See the
  776.                    _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O _G_u_i_d_e, publication SG-2168,
  777.                    for details.
  778.  
  779.                    Available on IRIX systems.
  780.  
  781.      vvmmss           Provides record blocking for common record types on
  782.                    VMS/MS operating systems.
  783.  
  784.                    Deferred implementation on IRIX systems.
  785.  
  786.                    For _t_y_p_e, enter one of the following record formats:
  787.  
  788.                    _t_y_p_e    FFoorrmmaatt
  789.  
  790.                    ff       Fixed-length records
  791.  
  792.                    vv       Variable length records
  793.  
  794.                    ss       Segmented variable records
  795.  
  796.                    Each _t_y_p_e accepts the following _s_u_b_t_y_p_es to specify the
  797.                    blocking format within the record type:
  798.  
  799.                    _s_u_b_t_y_p_e FFoorrmmaatt
  800.  
  801.                    ttaappee    ANSI standard record format.  This _s_u_b_t_y_p_e
  802.                            should be used with labeled VAX/VMS tapes.
  803.  
  804.                    bbbb      Binary blocked format.  This _s_u_b_t_y_p_e should be
  805.                            used with files that are to be fetched or
  806.                            disposed with a BBBB or TTBB format, or with
  807.                            unlabeled magnetic tapes.  This _s_u_b_t_y_p_e requires
  808.                            an enclosing blocking; for example, vvmmss..ss..bbbb,,bbmmxx
  809.                            or vvmmss..ss..bbbb,,ccooss.
  810.  
  811.                    ttrr      Transparent format.  This _s_u_b_t_y_p_e should be used
  812.                            with files that are transferred between the
  813.                            VAX/VMS system by using ffeettcchh or ddiissppoossee and the
  814.                            TTRR format.  Any other method that precisely
  815.                            transfers the disk image, including all VMS
  816.                            control words, will also work.  Note that ffttpp
  817.                            does not correctly transfer nontext,
  818.                            variable-length record files.
  819.  
  820.                   This class accepts _n_u_m_1 and _n_u_m_2 fields; they have a
  821.                   similar meaning to iibbmm class.  For _t_y_p_e ss, _n_u_m_1 is
  822.                   ignored.  For _t_y_p_e ff, _n_u_m_2 need not be a multiple of
  823.                   _n_u_m_1.
  824.  
  825.                   You can specify the numeric parameters with this
  826.                   alternate keyword syntax:
  827.  
  828.                   vvmmss[[.._t_y_p_e]][[.._s_u_b_t_y_p_e]][[..rreeccssiizzee==_n_u_m_1]][[..mmbbss==_n_u_m_2]]
  829.  
  830. EEXXAAMMPPLLEESS
  831.      The following are example FFIO specifications.
  832.  
  833.      Example 1:  The following example specifies FORTRAN 77/UNICOS Fortran
  834.      blocking with a working buffer of 128,000 bytes to allow efficient
  835.      creation of logical records up to 127,992 bytes:
  836.  
  837.           f77::128000
  838.  
  839.      Example 2:  The following example specifies IBM VBS records with a
  840.      block size of 16,384 bytes:
  841.  
  842.           ibm.vbs::16384
  843.  
  844.      Example 3:  The following example specifies a memory-resident layer
  845.      with an initial memory size of 100 4096-byte blocks:
  846.  
  847.           mr:100
  848.  
  849.      Example 4:  The following example specifies VMS V records with a
  850.      maximum record size of 1000 bytes:
  851.  
  852.           vms.v.tr:1000
  853.  
  854.      Example 5:  The following example specifies the SS-resident layer that
  855.      loads from disk on open and saves to disk on close, does not allow
  856.      overflow, has an initial size of 10 4096-byte blocks in SDS, grows to
  857.      a maximum size of 559 blocks in minimum increments of 37 blocks:
  858.  
  859.           sds.save.novfl:10:559:37
  860.  
  861.      See the _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O _G_u_i_d_e, publication SG-2168, for
  862.      more detailed information about FFIO specifications.
  863.  
  864. NNOOTTEESS
  865.      Some FFIO specification requirements are not obvious.  For example,
  866.      CYBER 205 R-type records must be requested with bbllxx..ccttssss,,tteexxtt..220055.
  867.  
  868.      The Fortran I/O library checks for conflicting attributes when file
  869.      name and unit attributes are both present during OOPPEENN processing for a
  870.      Fortran unit.  The existence of an assign attribute for both the file
  871.      and the unit results in an error condition.
  872.  
  873. SSEEEE AALLSSOO
  874.      _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _I/_O _G_u_i_d_e, publication SG-2168
  875.  
  876.      aaccppttbbaadd(3F), aassssiiggnn(3F), ffffooppeenn(3C), ooppeennmmss(3F), ooppeennddrr (see
  877.      ooppeennmmss(3F)), sskkiippbbaadd(3F)
  878.  
  879.      ddff(1), llnn(1), sseettff(1), ttppmmnntt(1), wwrriittee(1)
  880.  
  881.      aassggccmmdd(1), aassssiiggnn(1)
  882.  
  883.      iiaalllloocc(2), ooppeenn(2)
  884.  
  885.      SSDDSSAALLLLOOCC(3F)
  886.  
  887.      _A_p_p_l_i_c_a_t_i_o_n _P_r_o_g_r_a_m_m_e_r'_s _L_i_b_r_a_r_y _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l, publication
  888.      SR-2165, for the printed version of this man page.
  889.